#if !defined(__APP_BUFFER_H)
#define __APP_BUFFER_H

typedef struct
{
    char *ptr;      // 缓存区数据指针
    int total_size; // 缓存区总大小
    int len;        // 缓存区已存数据长度
    int offset;     // 缓存区数据偏移量
} Buffer;

/**
 * @brief 初始化缓冲区
 * @param size 缓冲区大小
 * @return Buffer* 缓冲区指针
 */
Buffer *app_buffer_init(int size);

/**
 * @brief 释放缓冲区
 * @param buffer 缓冲区指针
 * @return NULL
 */
void app_buffer_free(Buffer *buffer);

/**
 * @brief 向缓冲区写入数据
 * @param buffer 缓冲区指针
 * @param data 数据指针
 * @param len 数据长度
 * @return 成功0（全部写入了） 失败-1（可能是缓冲区空间不够了）
 */
int app_buffer_write(Buffer *buffer, char *data, int len);

/**
 * @brief 从缓冲区读取数据
 * @param buffer 缓冲区指针
 * @param data 存放读取数据的容器（一般是数组）
 * @param len 要读取数据的长度
 * @return 成功0  失败-1(可能是缓冲区的数据长度不够)
 */
int app_buffer_read(Buffer *buffer, char *data, int len);

#endif // __APP_BUFFER_H
